xcode 按单元格中指定的时间(HH:mm)排列tableView中的单元格

您所在的位置:网站首页 dateformatter java xcode 按单元格中指定的时间(HH:mm)排列tableView中的单元格

xcode 按单元格中指定的时间(HH:mm)排列tableView中的单元格

#xcode 按单元格中指定的时间(HH:mm)排列tableView中的单元格 | 来源: 网络整理| 查看: 265

有一个tableView,它最初应该是空的。用户可以添加事件点击“+”按钮并在单独的视图控制器上填写表单(AddSession文件)。表单包含事件开始和结束时间的文本字段,以及事件的名称和地点。只要用户点击此表单中的添加按钮我希望tableView中的事件自动按时间排列。较晚的事件应该排在底部,较早的事件应该排在顶部。看起来有点复杂,而且我对编码非常陌生。每个事件都有开始时间和结束时间,所以我甚至不能开始思考在排序过程中应该比较什么。我假设两个单独的事件不应该有时间重叠,我可能也应该考虑如何限制这一点。否则,整个tableView将变得完全混乱。那么我如何才能完成这个自动排列/排序过程呢?下面是我的主viewController的代码:

import UIKit class ParticularEventVC: UIViewController, UITableViewDataSource { @IBOutlet weak var sessionsTable: UITableView! var sessions: [sessionModel] = [] override func viewDidLoad() { super.viewDidLoad() sessionsTable.dataSource = self } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { sessions.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = sessionsTable.dequeueReusableCell(withIdentifier: "PrototypeCell", for: indexPath as IndexPath) as! PrototypeCell let session = sessions[indexPath.row] cell.sessionBeginningTime.text = session.modelTimeBeginning cell.sessionEndingTime.text = session.modelTimeEnding cell.sessionName.text = session.modelSession cell.sessionVenue.text = session.modelVenue return cell } @IBAction func unwindToSessionsList(segue: UIStoryboardSegue) { guard let vc = segue.source as? AddSession else {return} guard let timeBeginning = vc.timeBeginningTextField.text, let timeEnding = vc.timeEndingTextField.text, let ssn = vc.sessionNameTextField.text, let vn = vc.sessionVenueTextField.text else {return} let Session = sessionModel(modelTimeBeginning: timeBeginning, modelTimeEnding: timeEnding, modelSession: ssn, modelVenue: vn) sessions.append(Session) sessionsTable.reloadData() } }

下面是添加会话的代码:

import UIKit class AddSession: UIViewController { @IBOutlet weak var timeBeginningTextField: UITextField! @IBOutlet weak var timeEndingTextField: UITextField! @IBOutlet weak var sessionNameTextField: UITextField! @IBOutlet weak var sessionVenueTextField: UITextField! @IBAction func cancelAddSession(_ sender: Any) { performSegue(withIdentifier: "unwindToSessionsList", sender: self)} @IBAction func addSession(_ sender: Any) { performSegue(withIdentifier: "unwindToSessionsList", sender: self)} override func viewDidLoad() { super.viewDidLoad() // MARK: Filling the beginning time with the datepicker let timeB = Date() let formatterTB = DateFormatter() formatterTB.dateFormat = "HH:mm" timeBeginningTextField.text = formatterTB.string(from: timeB) let timePickerB = UIDatePicker() timePickerB.datePickerMode = .time timePickerB.addTarget(self, action: #selector(timePickerBValueChanged(sender:)), for: UIControl.Event.valueChanged) timePickerB.preferredDatePickerStyle = .wheels timePickerB.frame.size = CGSize(width: 0, height: 250) timeBeginningTextField.inputView = timePickerB // MARK: Filling the ending time with the datepicker let timeE = Date() let formatterTE = DateFormatter() formatterTE.dateFormat = "HH:mm" timeEndingTextField.text = formatterTE.string(from: timeE) let timePickerE = UIDatePicker() timePickerE.datePickerMode = .time timePickerE.addTarget(self, action: #selector(timePickerEValueChanged(sender:)), for: UIControl.Event.valueChanged) timePickerE.preferredDatePickerStyle = .wheels timePickerE.frame.size = CGSize(width: 0, height: 250) timeEndingTextField.inputView = timePickerE } @objc func timePickerBValueChanged(sender: UIDatePicker) { let FormatterTB = DateFormatter() FormatterTB.dateFormat = "HH:mm" timeBeginningTextField.text = FormatterTB.string(from: sender.date)} @objc func timePickerEValueChanged(sender: UIDatePicker) { let formatterTE = DateFormatter() formatterTE.dateFormat = "HH:mm" timeEndingTextField.text = formatterTE.string(from: sender.date)} }

这是我的原型单元的代码(不知道你是否需要它):

import UIKit class PrototypeCell: UITableViewCell { @IBOutlet weak var sessionBeginningTime: UILabel! @IBOutlet weak var sessionEndingTime: UILabel! @IBOutlet weak var sessionName: UILabel! @IBOutlet weak var sessionVenue: UILabel! override func awakeFromNib() { super.awakeFromNib()} override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated)} }

这是我的session模型的代码:

import Foundation struct sessionModel { let modelTimeBeginning: String let modelTimeEnding: String let modelSession: String let modelVenue: String }

[一个月一次](一个月一次)另外,回应你的答案(NeZha和OneComment家伙)(不知道该放在哪里):非常感谢您的回应和解决方案!正如我之前所说,我对编码非常陌生,所以我对您提供的内容没有这种直观的理解,lol。我主要看YouTube教程并尝试使用他们的方法来实现我的目的。至于你所说的,我给了它一个旋转并改变了:

let modelTimeBeginning: String let modelTimeEnding: String

let modelTimeBeginning: Date let modelTimeEnding: Date

但它引起了一大堆新问题。例如:

let session = sessions[indexPath.row] cell.beginningTime.date = session.modelTimeBeginning cell.endingTime.date = session.modelTimeEnding return cell

它表示“类型”UILabel“的值没有成员”date““这里:

guard let vc = segue.source as? AddSession else {return} guard let timeBeginning = vc.beginningTimeDatePicker.date, let timeEnding = vc.endingTimeDatePicker.date, let ssn = vc.eventTextField.text else {return} let Session = Model(modelTimeBeginning: timeBeginning, modelTimeEnding: timeEnding, modelSession: ssn) sessions.append(Session) sessionsTable.reloadData()

条件绑定的初始化器必须具有Optional类型,而不是'Date'据我所知,我正在将Date转换为String,以便填充文本字段。所以在我进行转换之前,应该在某个地方进行排序,对吗?天哪,这些编码太令人困惑了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3